#include <cstring>
#include <iostream>

/*
函数重载，在同一个作用域下，函数名一样，但是函数签名不一样

c++支持函数重载，c不支持函数重载，
c++产生函数符号时，由函数名和参数列表组成
c产生函数符号时，直接使用函数名作为函数符号

函数形参类型为int 和 const int 不构成重载，而是重定义，const对于编译器不可见，编译器只是不让该const变量作为左值
当const右边有*时 则const参与类型推导

返回值不同不构成重载

函数重载属于静态多态

C 调用C++
无法直接调用，链接错误，需要使用`extern "C" {// C++函数实现}`
最佳实践需要搭配#ifdef __cplusplus使用，如下：

#ifdef __cplusplus
extern "C" {  // c++编译器会进入到ifdef，按照c规则生成符号表，c编译器不进来，直接生成c符号
#endif
// c++ 函数实现
#ifdef __cplusplus
}
#endif

上面这段代码主要是为了把C++代码提供给C使用


C++ 调用C
无法直接调用，链接错误，需要使用 `extern "C" { // C函数的声明}`

extern "C"{
int sum(int a,int b);  // 按照C规则生成符号表，链接时就能找到正确的函数地址
}

extern "C" c++编译器才认识，c编译器不认识
*/
bool compare(int a, int b) { return a > b; }

bool compare(double a, double b) { return a > b; }

bool compare(const char *a, const char *b) { return strcmp(a, b) > 0; }
int main() {

  compare(1, 2);
  compare(3.12, 3.14);
  compare("hello", "world");
}